// 给一个英语文件作为输入，统计其中有多少不同单词还有每个单词的数量。
// 要求用结构数组完成，可以用strcmp函数判断字符串是否已存在。给出C语言代码解决这个问题。

#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include "string.h"
typedef struct Word{
    char *content;
    int num;
}Word;

int isChar(char c){
    return ('a' <= c && 'z' >= c) || ('A' <= c && 'Z' >= c);
}

int isExist(char * str,Word words[], int size){
    for (int i=0; i<size; ++i) {
        if(strcmp(str, words[i].content)==0){
            words[i].num++;
            return 1;
        }
    }
    return 0;
}

void countWords(Word words[], int *size){
    FILE *fp = fopen("text.txt", "r");
    if (fp == NULL) {
        exit(-1);
    }
    char ch;
    char buffer[50];
    int len = 0;
    while ((ch = fgetc(fp)) != EOF) {
        if(!isChar(ch)){
            buffer[len] = 0;
            // 如果已经存在
            if (isExist(buffer, words, *size)) {
                continue;
            }
            // 如果不存在
            Word *word = words + (*size)++;
            word->num = 1;
            word->content = (char *)malloc(sizeof(char)*len);
            strcpy(word->content, buffer);
            len = 0;
        }else{
            buffer[len++] = ch;
        }
    }

}

int main(){
    Word words[400];
    int size = 0;
    countWords(words, &size);
    for (int i=0; i<size; ++i) {
        printf("%s: %d\n",words[i].content,words[i].num);
    }
    return 0;
}




